// Pipit C标准库 - Math模块实现
#include "pipit_stdlib.h"
#include <math.h>

// 加法
int pipit_add(int a, int b) {
    return a + b;
}

// 减法
int pipit_subtract(int a, int b) {
    return a - b;
}

// 乘法
int pipit_multiply(int a, int b) {
    return a * b;
}

// 除法
int pipit_divide(int a, int b) {
    if (b == 0) {
        // 处理除以零的情况
        return 0; // 或者返回一个错误码
    }
    return a / b;
}

// 取模运算
int pipit_modulo(int a, int b) {
    if (b == 0) {
        // 处理除以零的情况
        return 0;
    }
    return a % b;
}

// 求幂运算
double pipit_power(double base, double exponent) {
    return pow(base, exponent);
}

// 平方根
double pipit_sqrt(double x) {
    if (x < 0) {
        // 处理负数情况
        return 0;
    }
    return sqrt(x);
}

// 绝对值
int pipit_abs(int x) {
    return abs(x);
}

// 最大值
int pipit_max(int a, int b) {
    return (a > b) ? a : b;
}

// 最小值
int pipit_min(int a, int b) {
    return (a < b) ? a : b;
}

// 四舍五入
int pipit_round(double x) {
    return (int)(x + 0.5);
}

// 向下取整
int pipit_floor(double x) {
    return (int)floor(x);
}

// 向上取整
int pipit_ceil(double x) {
    return (int)ceil(x);
}

// 随机数生成（0到RAND_MAX之间）
int pipit_random() {
    return rand();
}

// 设置随机种子
void pipit_srand(unsigned int seed) {
    srand(seed);
}

// 生成指定范围内的随机数
int pipit_random_range(int min, int max) {
    if (min >= max) return min;
    return min + rand() % (max - min + 1);
}

// 三角函数 - 正弦
double pipit_sin(double x) {
    return sin(x);
}

// 三角函数 - 余弦
double pipit_cos(double x) {
    return cos(x);
}

// 三角函数 - 正切
double pipit_tan(double x) {
    return tan(x);
}

// 对数运算（自然对数）
double pipit_log(double x) {
    if (x <= 0) return 0;
    return log(x);
}

// 对数运算（以10为底）
double pipit_log10(double x) {
    if (x <= 0) return 0;
    return log10(x);
}

// 指数运算（e的x次方）
double pipit_exp(double x) {
    return exp(x);
}

// 生成随机浮点数（0到1之间）
double pipit_random_float() {
    return (double)rand() / RAND_MAX;
}

// 判断是否为质数
int pipit_is_prime(int n) {
    if (n <= 1) return 0;
    if (n <= 3) return 1;
    if (n % 2 == 0 || n % 3 == 0) return 0;
    
    for (int i = 5; i * i <= n; i += 6) {
        if (n % i == 0 || n % (i + 2) == 0) return 0;
    }
    return 1;
}

// 计算阶乘
long long pipit_factorial(int n) {
    if (n < 0) return 0;
    if (n == 0 || n == 1) return 1;
    
    long long result = 1;
    for (int i = 2; i <= n; i++) {
        result *= i;
    }
    return result;
}

// 计算最大公约数
int pipit_gcd(int a, int b) {
    while (b != 0) {
        int temp = b;
        b = a % b;
        a = temp;
    }
    return abs(a);
}

// 计算最小公倍数
int pipit_lcm(int a, int b) {
    if (a == 0 || b == 0) return 0;
    return abs(a * b) / pipit_gcd(a, b);
}

// 将角度转换为弧度
double pipit_degrees_to_radians(double degrees) {
    return degrees * M_PI / 180.0;
}

// 将弧度转换为角度
double pipit_radians_to_degrees(double radians) {
    return radians * 180.0 / M_PI;
}